A non-volatile semiconductor memory may be employed as mass storage for a computer system (e.g., desktop, laptop, portable, etc.) or a consumer device (e.g., music player, cell phone, camera, etc.) or other suitable application. The non-volatile semiconductor memory may comprise one or more memory devices (such as a flash memory) and control circuitry for accessing each memory device. Each memory device is coupled to an I/O bus, as well as a number of interface control lines. When issuing a program command or an erase command to a memory device, the control circuitry transfers the address and command data (and write data for a program operation) over the I/O bus. When issuing a read command, the control circuitry transfers the address and command data over the I/O bus and then receives the read data over the I/O bus. After receiving the command, the memory device executes the command internally over an “access time”. To determine when the memory device has successfully finished executing the command, the control circuitry typically polls the memory device by issuing a “command status” request wherein the memory device transmits the contents of a command status register to the control circuitry.
Each memory device typically comprises one or more memory arrays programmed in segments referred to as “pages”. A number of pages are grouped into a “block”, wherein a page is erased by erasing the entire block of pages. Accordingly, different pages of a single block (or partial pages) may be programmed over a number of program cycles before erasing the block with an erase cycle. Each time a block is erased/programmed, the integrity of the block degrades such that the block will eventually fail. The specification for the memory device typically identifies a nominal number of erase/program cycles the device may endure before failing. In order to maximize the endurance of each memory device, a wear leveling algorithm is typically employed which helps evenly distribute the erase/program cycles over a number of the blocks (all or a portion of the blocks).